package main

import (
//"fmt"
)

//死锁1,无缓冲channel单goroutine
/*
func main() {
	ch := make(chan int)
	ch <- 789 //写入通道后阻塞,等待channel中的数据被读取,从这里开始下面的代码不会执行,channel中的数据无法读出而死锁
	num := <-ch
	println(num)
} */

//死锁2,channel读写顺序不正确导致死锁
/* func main() {
	ch := make(chan int)
	num := <-ch //主程序运行到这里因为channel中没有数据，导致阻塞，放弃CPU资源，导						致后面的程序无法得到执行，产生死锁
	fmt.Println("num:=", num)
	go func() {
		ch <- 789
	}()
} */

//死锁3 子goroutine和主goroutine相互通过channel要资源，造成死锁。

/* func main() {
	ch1 := make(chan int)
	ch2 := make(chan int)

	go func() {
		for {
			select {
			case num := <-ch1:
				ch2 <- num
				fmt.Println(num)
			}
		}
	}()

	for {
		select {
		case num := <-ch2:
			ch1 <- num
		}
	}
}
*/
